선형 방정식 시스템의 해법

(2.3)에서, 우리는 방정식 시스템의 일반적인 형태를 소개했다. 즉,

$$ \begin{matrix} a_{11}x_1 + \dots + a_{1n}x_n = b_1 \\ \vdots \\ a_{m1}x_1 + \dots + a_{mn}x_n = b_m \end{matrix} \quad (2.37) $$

여기서 $a_{ij} \in \mathbb{R}$ 와 $b_i \in \mathbb{R}$ 은 알려진 상수들이고, $x_j$ 는 미지수들이다 ( $i=1, \dots, m, \ j=1, \dots, n$ ). 지금까지 우리는 선형 방정식을 $\boldsymbol{Ax} = \boldsymbol{b}$ 로 쓸 수 있도록 시스템을 공식화하는 간결한 방법으로 행렬을 사용할 수 있음을 보았다 (2.10 참조). 게다가, 우리는 행렬의 덧셈과 곱셈 같은 기본적인 행렬 연산들을 정의했다. 이어지는 내용에서, 우리는 선형 연립방정식을 푸는 데 초점을 맞추고 행렬의 역행렬을 구하는 알고리즘을 제공할 것이다.

$\to$ $3\boldsymbol{x}=6$ 에서 $\boldsymbol{x}=3^{-1}\cdot 6=2$ 를 구하듯이, $\boldsymbol{Ax}=\boldsymbol{b}$ 의 해 $\boldsymbol{}x$ 를 구하려면 $\boldsymbol{x}=\boldsymbol{A}^{-1}\boldsymbol{b}$ 를 만족하는 $\boldsymbol{A}$ 의 역행렬 $\boldsymbol{A}^{-1}$ 이 존재해야 한다. 즉, $\boldsymbol{A}$ 가 정사각행렬이어야 하고 역행렬이 존재하는 가역행렬일 때 유일한 해 $\boldsymbol{x}$ 가 나온다. 하지만 이는 이상적인 경우이며, 현실에서 보통 데이터의 개수( $m$ )와 변수의 개수( $n$ )가 다른 직사각행렬이다. 이때 $\boldsymbol{A}$ 는 역행렬이 존재하지 않고 대신, $\boldsymbol{Ax}$ 와 $\boldsymbol{b}$ 의 차이를 최소화하는 최적의 근사해를 찾는데 이때 사용하는 것이 유사 역행렬개념이나 최소 제곱법이다(이는 9장에서 선형 회귀와 함께 다룬다, $x \approx (A^\top A)^{-1}A^\top b$ ).

$\to$ 종종 $\boldsymbol{A}$ 가 정사각이지만 행렬식이 0이되어 역행렬이 없는 경우(ex. 사영 변환) $\boldsymbol{A}^{-1}$ 를 구할 수 없다. 이떄 해는 무수히 많거나 존재하지 않을 수 있다.

2.3.1 특수 해와 일반 해

선형 연립방정식을 일반적으로 푸는 방법을 논의하기 전에, 예제를 하나 살펴보자. 다음의 방정식 시스템을 고려해 보자:

$$ \begin{bmatrix} 1 & 0 & 8 & -4 \\ 0 & 1 & 2 & 12 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{bmatrix} = \begin{bmatrix} 42 \\ 8 \end{bmatrix}. \quad (2.38) $$

이 시스템은 두 개의 방정식과 네 개의 미지수를 가지고 있다. 따라서, 일반적으로 우리는 무수히 많은 해를 기대할 수 있다. 이 방정식 시스템은 특히 쉬운 형태를 띠고 있는데, 처음 두 열이 각각 1과 0으로 구성되어 있기 때문이다.
우리가 $\sum_{i=1}^4 x_i c_i = \boldsymbol{b}$ 가 되도록 하는 스칼라 $x_1, \dots, x_4$ 를 찾고 싶어 한다는 것을 기억하자(여기서 $c_i$ 는 행렬의 $i$ 번째 열이고 $\boldsymbol{b}$ 는 식 (2.38)의 우변이다). 식 (2.38)의 문제에 대한 해 중 하나는 첫 번째 열을 42번 가져오고 두 번째 열을 8번 가져옴으로써 즉시 찾을 수 있다. 즉:

$$ \boldsymbol{b} = \begin{bmatrix} 42 \\ 8 \end{bmatrix} = 42 \begin{bmatrix} 1 \\ 0 \end{bmatrix} + 8 \begin{bmatrix} 0 \\ 1 \end{bmatrix}. \quad (2.39) $$

따라서, $[42, 8, 0, 0]^\top$ 은 하나의 해가 된다. 이 해를 특수 해(particular solution) 또는 특별 해(special solution)라고 부른다.
하지만, 이것이 이 선형 연립방정식의 유일한 해는 아니다. 다른 모든 해를 포착하기 위해, 우리는 행렬의 열들을 사용하여 자명하지 않은 방식(non-trivial way)으로 0을 생성하는 창의적인 방법이 필요하다. 우리의 특수 해에 0을 더하는 것은 특수 해를 변화시키지 않기 때문이다. 이를 위해, 우리는 세 번째 열을 처음 두 열(매우 단순한 형태인)을 사용하여 표현해 본다:

$$ \begin{bmatrix} 8 \\ 2 \end{bmatrix} = 8 \begin{bmatrix} 1 \\ 0 \end{bmatrix} + 2 \begin{bmatrix} 0 \\ 1 \end{bmatrix} \quad (2.40) $$

$\to$ ‘자명하지 않은 방식으로 0을 생성하는 창의적인 방법’은 $\boldsymbol{Ax}=\boldsymbol{0}$ 을 만족하는 $\boldsymbol{x}$ 값들을 찾겠다는 뜻이다.

따라서 $0 = 8c_1 + 2c_2 - 1c_3 + 0c_4$ 가 성립하며, $(x_1, x_2, x_3, x_4) = (8, 2, -1, 0)$ 을 얻는다. 사실, 이 해를 임의의 실수 $\lambda_1 \in \mathbb{R}$ 로 스케일링(배수)하더라도 여전히 0 벡터를 생성한다. 즉,

$$ \begin{bmatrix} 1 & 0 & 8 & -4 \\ 0 & 1 & 2 & 12 \end{bmatrix} \left( \lambda_1 \begin{bmatrix} 8 \\ 2 \\ -1 \\ 0 \end{bmatrix} \right) = \lambda_1 (8c_1 + 2c_2 - c_3) = \boldsymbol{0}. \quad (2.41) $$

동일한 논리적 흐름을 따라, 우리는 식 (2.38) 행렬의 네 번째 열을 처음 두 열을 사용하여 표현하고, 다음과 같이 0의 또 다른 자명하지 않은(non-trivial) 버전을 생성할 수 있다.

$$ \begin{bmatrix} 1 & 0 & 8 & -4 \\ 0 & 1 & 2 & 12 \end{bmatrix} \left( \lambda_2 \begin{bmatrix} -4 \\ 12 \\ 0 \\ -1 \end{bmatrix} \right) = \lambda_2 (-4c_1 + 12c_2 - c_4) = \boldsymbol{0} \quad (2.42) $$

여기서 $\lambda_2 \in \mathbb{R}$ 이다. 이 모든 것을 종합하면, 우리는 식 (2.38)의 방정식 시스템에 대한 모든 해를 얻게 되며, 이를 일반 해(general solution)라고 부른다. 집합으로 표현하면 다음과 같다:

$$ \left\{ \boldsymbol{x} \in \mathbb{R}^4 : \boldsymbol{x} = \begin{bmatrix} 42 \\ 8 \\ 0 \\ 0 \end{bmatrix} + \lambda_1 \begin{bmatrix} 8 \\ 2 \\ -1 \\ 0 \end{bmatrix} + \lambda_2 \begin{bmatrix} -4 \\ 12 \\ 0 \\ -1 \end{bmatrix}, \ \lambda_1, \lambda_2 \in \mathbb{R} \right\}. \quad (2.43) $$

참고. 우리가 따른 일반적인 접근 방식은 다음의 세 단계로 구성된다:

  1. $Ax = b$ 에 대한 특수 해(particular solution)를 하나 찾는다.
  2. $Ax = 0$ 에 대한 모든 해를 찾는다.
  3. 1단계와 2단계의 해를 결합하여 일반 해를 만든다.

$\to$ 일반 해의 구조는 항상 $x = x_p + x_h$ 로써, 고정된 특수 해( $x_p$ )와 유일한 영공간의 해( $x_h$ )의 합으로 이루어진다.특수해는 $b$ 를 맞추기 위한 최소한의 기본 베이스이며, 영공간의 해는 $b$ 를 건드리지 않으면서 내부적으로 균형을 맞추는(동차시스템의 해) 자유로운 해이다.

$$ \boldsymbol{A}(\boldsymbol{x}_p + \boldsymbol{x}_h) = \boldsymbol{Ax}_p + \boldsymbol{Ax}_h = \boldsymbol{b} + \boldsymbol{0} = \boldsymbol{b} $$

$\to$ (2.43)을 보면 $\lambda_1, \lambda_2$ 라는 새로운 변수가 등장한다. 원래 변수는 4개였지만 식은 2개뿐이라서, 4-2=2개의 자유도가 남는다. 이 남는 자유도만큼 우리는 해를 무수히 많이 가질 수 있다.

$\to$ A의 행공간과 영공간은 항상 수직이며 두 공간을 직교여공간이라 한다. 현재 예시에서 두 공간은 모두 $\mathbb{R}^4$ 내 2차원 평면이며, 두 평면은 원점에서 만난다.

참고. 일반 해나 특수 해는 유일하지 않다. (예를 들어, 특수 해를 구할 때 $x_3, x_4$ 를 0으로 두지 않고 다른 숫자로 두면 또 다른 특수 해가 나온다).
$\quad$ 앞선 예제에서 선형 연립방정식을 쉽게 풀 수 있었던 이유는 식 (2.38)의 행렬이 특히 편리한 형태를 취하고 있었기 때문이다. 덕분에 우리는 직관적으로(by inspection) 특수 해와 일반 해를 찾아낼 수 있었다. 하지만, 일반적인 방정식 시스템은 이렇게 단순한 형태가 아니다. 다행히도, 임의의 선형 연립방정식 시스템을 이러한 특별히 단순한 형태로 변환하는 건설적이고 알고리즘적인 방법이 존재하는데, 그것이 바로 가우스 소거법(Gaussian elimination)이다. 가우스 소거법의 핵심은 선형 연립방정식 시스템의 기본 행 연산(elementary transformations)이며, 이는 방정식 시스템을 단순한 형태로 변환해 준다. 변환이 완료되면, 우리는 방금 (2.38)의 예제에서 논의했던 3단계를 단순해진 형태에 적용하여 해를 구할 수 있다.

2.3.2 기본 행 연산

선형 연립방정식을 푸는 열쇠는 기본 행 연산(elementary transformations)이다. 이것은 해 집합(solution set)을 그대로 유지하면서, 방정식 시스템을 더 단순한 형태로 변환한다:

  • 두 방정식(방정식 시스템을 나타내는 행렬의 행들)의 교환 (Exchange)
  • 방정식(행)에 0이 아닌 상수 $\lambda \in \mathbb{R} \setminus {0}$ 를 곱함 (Multiplication)
  • 두 방정식(행)의 덧셈 (Addition)

예제 2.6

실수 $a \in \mathbb{R}$ 에 대하여, 우리는 다음 연립방정식의 모든 해를 구하고자 한다:

$$ \begin{aligned} -2x_1 + 4x_2 - 2x_3 - x_4 + 4x_5 &= -3 \\ 4x_1 - 8x_2 + 3x_3 - 3x_4 + x_5 &= 2 \\ x_1 - 2x_2 + x_3 - x_4 + x_5 &= 0 \\ x_1 - 2x_2 \quad\quad\quad - 3x_4 + 4x_5 &= a \end{aligned} \quad (2.44) $$

우리는 이 방정식 시스템을 간결한 행렬 표기법 $\boldsymbol{Ax} = \boldsymbol{b}$ 로 변환하는 것으로 시작한다. 우리는 더 이상 변수 $x$ 를 명시적으로 언급하지 않고 첨가 행렬(augmented matrix)을 $[\boldsymbol{A} \vert \boldsymbol{b}]$ 형태로 구성한다.

$\to$ 첨가 행렬 $[\boldsymbol{A} \vert \boldsymbol{b}]$ 는 선형 연립방정식 $\boldsymbol{Ax} = \boldsymbol{b}$ 를 간결하게 표현한다.

$$ \left[ \begin{array}{rrrrr\vert r} -2 & 4 & -2 & -1 & 4 & -3 \\ 4 & -8 & 3 & -3 & 1 & 2 \\ 1 & -2 & 1 & -1 & 1 & 0 \\ 1 & -2 & 0 & -3 & 4 & a \end{array} \right] \begin{array}{l} \text{Swap with } R_3 \\ \\ \text{Swap with } R_1 \\ \\ \end{array} $$

여기서 우리는 (2.44)의 좌변과 우변을 구분하기 위해 수직선을 사용했다. 우리는 기본 행 연산을 사용한 첨가 행렬의 변환을 나타내기 위해 $\rightsquigarrow$ 기호를 사용한다.

행 1과 행 3을 교환(Swapping)하면 다음을 얻는다.

$$ \left[ \begin{array}{rrrrr\vert r} 1 & -2 & 1 & -1 & 1 & 0 \\ 4 & -8 & 3 & -3 & 1 & 2 \\ -2 & 4 & -2 & -1 & 4 & -3 \\ 1 & -2 & 0 & -3 & 4 & a \end{array} \right] \begin{array}{l} \\ -4R_1 \\ +2R_1 \\ -R_1 \end{array} $$

이제 표시된 변환들(예: 행 2에서 행 1의 4배를 뺌)을 적용하면,

$$ \left[ \begin{array}{rrrrr\vert r} 1 & -2 & 1 & -1 & 1 & 0 \\ 0 & 0 & -1 & 1 & -3 & 2 \\ 0 & 0 & 0 & -3 & 6 & -3 \\ 0 & 0 & -1 & -2 & 3 & a \end{array} \right] -R_2 - R_3 $$

(중략: 추가적인 행 연산을 통해 정리하면)

$$ \rightsquigarrow \left[ \begin{array}{rrrrr\vert r} 1 & -2 & 1 & -1 & 1 & 0 \\ 0 & 0 & 1 & -1 & 3 & -2 \\ 0 & 0 & 0 & 1 & -2 & 1 \\ 0 & 0 & 0 & 0 & 0 & a+1 \end{array} \right] $$

이 (첨가) 행렬은 편리한 형태인 행사다리꼴(row-echelon form, REF)이다. 이 간결한 표기법을 다시 우리가 찾고자 하는 변수들이 포함된 명시적 표기법으로 되돌리면, 다음을 얻는다.

$$ \begin{aligned} x_1 - 2x_2 + x_3 - x_4 + x_5 &= 0 \\ x_3 - x_4 + 3x_5 &= -2 \\ x_4 - 2x_5 &= 1 \\ 0 &= a + 1 \end{aligned} \quad (2.45) $$

오직 $a = -1$ 일 때만 이 시스템은 풀릴 수 있다(solved). 특수 해(particular solution)는 다음과 같다.

$$ \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \\ x_5 \end{bmatrix} = \begin{bmatrix} 2 \\ 0 \\ -1 \\ 1 \\ 0 \end{bmatrix}. \quad (2.46) $$

모든 가능한 해의 집합을 포착하는 일반 해(general solution)는 다음과 같다

$$ \left\{ \boldsymbol{x} \in \mathbb{R}^5 : \boldsymbol{x} = \begin{bmatrix} 2 \\ 0 \\ -1 \\ 1 \\ 0 \end{bmatrix} + \lambda_1 \begin{bmatrix} 2 \\ 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} + \lambda_2 \begin{bmatrix} 2 \\ 0 \\ -1 \\ 2 \\ 1 \end{bmatrix}, \ \lambda_1, \lambda_2 \in \mathbb{R} \right\}. \quad (2.47) $$

$\quad$ 이어지는 내용에서, 우리는 선형 연립방정식의 특수 해와 일반 해를 얻는 건설적인 방법(constructive way)을 자세히 설명할 것이다.
참고 (피벗과 계단 구조). 한 행의 선도 계수(leading coefficient) (왼쪽에서부터 처음으로 나오는 0이 아닌 숫자)를 피벗(pivot)이라고 부른다. 피벗은 항상 바로 위 행의 피벗보다 엄격하게(strictly) 오른쪽에 위치한다. 따라서, 행사다리꼴(row-echelon form)로 정리된 모든 방정식 시스템은 항상 “계단(staircase)” 구조를 가진다.

정의 2.6 (행사다리꼴, Row-Echelon Form). 행렬이 다음 조건들을 만족하면 행사다리꼴(REF)이라고 한다:

  • 오직 0으로만 구성된 행들은 행렬의 가장 아래쪽에 위치한다; 이에 따라, 적어도 하나의 0이 아닌 원소를 포함하는 모든 행들은 0으로만 구성된 행들보다 위에 있다.

  • 0이 아닌 행들만 보았을 때, 왼쪽에서부터 처음으로 나오는 0이 아닌 숫자(피벗 또는 선도 계수라고 불림)는 항상 바로 위 행의 피벗보다 엄격하게(strictly) 오른쪽에 위치한다.

참고 (기본 변수와 자유 변수). 행사다리꼴에서 피벗에 해당하는 변수들을 기본 변수(basic variables)라고 부르고, 나머지 변수들을 자유 변수(free variables)라고 부른다. 예를 들어, 식 (2.45)에서 $x_1, x_3, x_4$ 는 기본 변수이고, $x_2, x_5$ 는 자유 변수이다.
참고 (특수 해 구하기). 행사다리꼴은 우리가 특수 해를 결정해야 할 때 삶을 더 편하게 만들어 준다. 이를 위해, 우리는 방정식 시스템의 우변( $\boldsymbol{b}$ )을 오직 피벗 열(pivot columns)들만을 사용하여 표현한다. 즉 $\boldsymbol{b} = \sum_{i=1}^P \lambda_i \boldsymbol{p}_i$ 형태로 둔다. 여기서 $\boldsymbol{p}_i$ ( $i=1, \dots, P$ )는 피벗 열들이다. 계수 $\lambda_i$ 들은 가장 오른쪽 피벗 열부터 시작하여 왼쪽으로 작업을 진행하면 가장 쉽게 결정된다.
$\quad$ 앞선 예제에서, 우리는 다음을 만족하는 $\lambda_1, \lambda_2, \lambda_3$ 를 찾고자 할 것이다:

$$ \lambda_1 \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} + \lambda_2 \begin{bmatrix} 1 \\ 1 \\ 0 \\ 0 \end{bmatrix} + \lambda_3 \begin{bmatrix} -1 \\ -1 \\ 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ -2 \\ 1 \\ 0 \end{bmatrix}. \quad (2.48) $$

여기서부터, 우리는 비교적 직접적으로 $\lambda_3 = 1, \lambda_2 = -1, \lambda_1 = 2$ 임을 알 수 있다. 모든 것을 종합할 때, 우리는 계수를 암묵적으로 0으로 설정한 비-피벗 열(non-pivot columns)들을 잊어서는 안 된다. 따라서, 우리는 특수 해 $\boldsymbol{x} = [2, 0, -1, 1, 0]^\top$ 을 얻는다.
참고 (기약 행사다리꼴, Reduced Row Echelon Form). 어떤 방정식 시스템이 다음 조건들을 만족하면 기약 행사다리꼴(또는 행 간소화 사다리꼴, 행 정규형)이라고 한다:

  • 행사다리꼴(row-echelon form)이다.
  • 모든 피벗은 1이다.
  • 피벗은 해당 열(column)에서 유일하게 0이 아닌 성분이다.

$\quad$ 기약 행사다리꼴(RREF)은 나중에 2.3.3절에서 중요한 역할을 하게 되는데, 왜냐하면 이것이 선형 연립방정식의 일반 해를 아주 간단하고 직접적인(straightforward) 방식으로 구할 수 있게 해주기 때문이다.
참고 (가우스 소거법, Gaussian Elimination). 가우스 소거법은 선형 연립방정식을 기약 행사다리꼴(reduced row-echelon form)로 변환하기 위해 기본 행 연산을 수행하는 알고리즘이다.

예제 2.7 (기약 행사다리꼴, Reduced Row Echelon Form)

다음 행렬이 기약 행사다리꼴인지 확인하라 (피벗은 굵은 글씨로 표시됨):

$$ \boldsymbol{A} = \begin{bmatrix} \mathbf{1} & 3 & 0 & 0 & 3 \\ 0 & 0 & \mathbf{1} & 0 & 9 \\ 0 & 0 & 0 & \mathbf{1} & -4 \end{bmatrix}. \quad (2.49) $$

$\boldsymbol{Ax} = \boldsymbol{0}$ 의 해를 찾기 위한 핵심 아이디어는 비-피벗 열(non-pivot columns)들을 살펴보는 것인데, 우리는 이들을 피벗 열들의 (선형) 결합으로 표현해야 한다. 기약 행사다리꼴은 이 작업을 상대적으로 직관적으로(straightforward) 만들어 주는데, 우리는 비-피벗 열들을 그들 왼쪽에 있는 피벗 열들의 합과 배수로 표현할 수 있다:

두 번째 열은 첫 번째 열의 3배이다 (우리는 두 번째 열 오른쪽에 있는 피벗 열들은 무시할 수 있다). 따라서, 0을 얻기 위해서는 첫 번째 열의 3배에서 두 번째 열을 빼야 한다.

이제 우리의 두 번째 비-피벗 열인 다섯 번째 열을 살펴보자. 다섯 번째 열은 첫 번째 피벗 열의 3배, 두 번째 피벗 열의 9배, 그리고 세 번째 피벗 열의 -4배로 표현될 수 있다.

우리는 피벗 열들의 인덱스(위치)를 추적하여 이를 해석해야 한다: 첫 번째 열(1번 피벗 열)의 3배, 두 번째 열(비-피벗 열)의 0배, 세 번째 열(2번 피벗 열)의 9배, 네 번째 열(3번 피벗 열)의 -4배. 그런 다음 0을 얻기 위해 다섯 번째 열을 빼야 한다. 결국, 우리는 여전히 동차 연립방정식(homogeneous equation system)을 풀고 있는 것이다.

요약하면, $\boldsymbol{Ax} = \boldsymbol{0}, \boldsymbol{x} \in \mathbb{R}^5$ 의 모든 해는 다음과 같이 주어진다:

$$ \left\{ \boldsymbol{x} \in \mathbb{R}^5 : \boldsymbol{x} = \lambda_1 \begin{bmatrix} 3 \\ -1 \\ 0 \\ 0 \\ 0 \end{bmatrix} + \lambda_2 \begin{bmatrix} 3 \\ 0 \\ 9 \\ -4 \\ -1 \end{bmatrix}, \quad \lambda_1, \lambda_2 \in \mathbb{R} \right\}. \quad (2.50) $$

2.3.3 마이너스 1 트릭 (The Minus-1 Trick)

다음으로, 우리는 동차 선형 연립방정식 $\boldsymbol{Ax} = \boldsymbol{0}$ ( $A \in \mathbb{R}^{k \times n}, \boldsymbol{x} \in \mathbb{R}^n$ )의 해 $\boldsymbol{x}$ 를 읽어내는 실용적인 트릭을 소개한다.
시작하기 위해, 우리는 행렬 $\boldsymbol{A}$ 가 기약 행사다리꼴(RREF)이며 0으로만 구성된 행은 없다고 가정한다. 즉,

$$ \boldsymbol{A} = \begin{bmatrix} 0 & \dots & 0 & \mathbf{1} & * & \dots & * & 0 & * & \dots & * & 0 & * & \dots & * \\ \vdots & & \vdots & 0 & 0 & \dots & 0 & \mathbf{1} & * & \dots & * & \vdots & \vdots & & \vdots \\ \vdots & & \vdots & \vdots & \vdots & & \vdots & 0 & \vdots & & \vdots & \vdots & \vdots & & \vdots \\ \vdots & & \vdots & \vdots & \vdots & & \vdots & \vdots & \vdots & & \vdots & 0 & \vdots & & \vdots \\ 0 & \dots & 0 & 0 & 0 & \dots & 0 & 0 & 0 & \dots & 0 & \mathbf{1} & * & \dots & * \end{bmatrix}, \quad (2.51) $$

여기서 $*$ 는 임의의 실수를 나타내며, 각 행의 첫 번째 0이 아닌 성분은 반드시 1이어야 하고 해당 열의 다른 모든 성분은 0이어야 한다는 제약 조건이 있다. 피벗(굵은 글씨)이 포함된 열 $j_1, \dots, j_k$ 는 표준 단위 벡터 $\boldsymbol{e}_1, \dots, \boldsymbol{e}_k \in \mathbb{R}^k$ 이다.
우리는 이 행렬에 다음과 같은 형태의 $n-k$ 개의 행을 추가하여 $n \times n$ 행렬 $\tilde{\boldsymbol{A}}$ 로 확장한다:

$$ \begin{bmatrix} 0 & \dots & 0 & -1 & 0 & \dots & 0 \end{bmatrix} \quad (2.52) $$

이렇게 하면 확장된 행렬 $\tilde{\boldsymbol{A}}$ 의 대각선 성분은 1 또는 -1이 된다.
그러면, $\tilde{\boldsymbol{A}}$ 의 열들 중에서 피벗으로 -1을 포함하고 있는 열들이 바로 동차 연립방정식 $\boldsymbol{Ax} = \boldsymbol{0}$ 의 해가 된다. 더 정확하게 말하면, 이 열들은 $\boldsymbol{Ax} = \boldsymbol{0}$ 의 해 공간(solution space)의 기저(basis)를 형성하며, 우리는 나중에 이것을 커널(kernel) 또는 영공간(null space)이라고 부를 것이다 (2.7.3절 참조).

예제 2.8 (마이너스 1 트릭)

이미 기약 행사다리꼴(reduced REF) 형태인 식 (2.49)의 행렬을 다시 살펴보자:

$$ \boldsymbol{A} = \begin{bmatrix} 1 & 3 & 0 & 0 & 3 \\ 0 & 0 & 1 & 0 & 9 \\ 0 & 0 & 0 & 1 & -4 \end{bmatrix}. \quad (2.53) $$

이제 대각선(diagonal)에 피벗이 빠져 있는 위치에 식 (2.52) 형태의 행(row)들을 추가하여, 이 행렬을 $5 \times 5$ 행렬로 확장하면 다음을 얻는다:

$$ \tilde{\boldsymbol{A}} = \begin{bmatrix} 1 & 3 & 0 & 0 & 3 \\ 0 & \mathbf{-1} & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 9 \\ 0 & 0 & 0 & 1 & -4 \\ 0 & 0 & 0 & 0 & \mathbf{-1} \end{bmatrix}. \quad (2.54) $$

이 형태로부터, 우리는 대각선에 $-1$ 을 포함하고 있는 $\tilde{\boldsymbol{A}}$ 의 열(columns)들을 가져옴으로써 $Ax = 0$ 의 해를 즉시 읽어낼 수 있다:

$$ \left\{ \boldsymbol{x} \in \mathbb{R}^5 : \boldsymbol{x} = \lambda_1 \begin{bmatrix} 3 \\ -1 \\ 0 \\ 0 \\ 0 \end{bmatrix} + \lambda_2 \begin{bmatrix} 3 \\ 0 \\ 9 \\ -4 \\ -1 \end{bmatrix}, \quad \lambda_1, \lambda_2 \in \mathbb{R} \right\}, \quad (2.55) $$

이는 우리가 앞서 ‘통찰(insight)’을 통해 얻었던 식 (2.50)의 해와 동일하다.

$\to$ 왜 하필 다른 숫자가 아닌 -1이어야만 하는지에 대해 생각해보자.

식 (2.53)에서 $\boldsymbol{Ax}=\boldsymbol{0}$ 를 만족하는 $\boldsymbol{x}$ 를 찾아보자.

$$ \begin{aligned} x_1 + 3x_2 + 3x_5 &= 0 \\ x_3 + 9x_5 &= 0 \\ x_4 -4x_5 &= 0 \end{aligned} $$

위 연립방정식의 해를 $\boldsymbol{x}=\begin{bmatrix} x_1 \ x_2 \ x_3 \ x_4 \ x_5 \end{bmatrix}$ 꼴로 나타내면 $\boldsymbol{x}=\begin{bmatrix} -3x_2-3x_5 \ x_2+0 \ 0 -9x_5 \ 0+4x_5 \ 0+x_5 \end{bmatrix}$ 와 같다. 이를 $x_2$ 와 $x_5$ 를 가중치로 갖는 두 벡터의 선형 결합으로 나타내보자.

$$ \boldsymbol{x}=x_2 \begin{bmatrix} -3 \\ 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} + x_5 \begin{bmatrix} -3 \\ 0 \\ -9 \\ 4 \\ 1 \end{bmatrix}, \quad x_2, x_5 \in \mathbb{R} $$

위 꼴은 식 (2.55)에서 두 벡터의 부호만 바뀐 형태이다. 식 (2.53)을 (2.54)꼴로 바꿀 때, 자유 변수 자리에 -1을 넣음으로써 원래 행렬 $A$ (2.53)의 부호를 그대로 가져와 영공간의 기저 벡터로 사용할 수 있다.

역행렬 계산
$A \in \mathbb{R}^{n \times n}$ 의 역행렬 $A^{-1}$ 를 계산하기 위해서, 우리는 $AX = I_n$ 을 만족하는 행렬 $X$ 를 찾아야 한다. 그러면 $X = A^{-1}$ 가 된다. 우리는 이것을 연립 일차방정식들의 집합 $AX = I_n$ 으로 쓸 수 있으며, 여기서 우리는 $X = [x_1 \vert \dots \vert x_n]$ 에 대해 푼다. 우리는 이 연립방정식 집합의 간결한 표현을 위해 첨가 행렬 표기법을 사용하며 다음과 같은 꼴을 얻는다.

$$ [A \vert I_n] \quad \rightsquigarrow \quad \dots \quad \rightsquigarrow \quad [I_n \vert A^{-1}]. \quad (2.56) $$

이것이 의미하는 바는, 만약 우리가 첨가된 방정식 시스템을 기약 행사다리꼴(reduced row-echelon form)로 변환하면, 방정식 시스템의 우변에서 역행렬을 읽어낼 수 있다는 것이다. 따라서, 행렬의 역행렬을 결정하는 것은 연립 일차방정식을 푸는 것과 동치이다.

예제 2.9 (가우스 소거법을 이용한 역행렬 계산)

다음 행렬의 역행렬을 결정하기 위해

$$ A = \begin{bmatrix} 1 & 0 & 2 & 0 \\ 1 & 1 & 0 & 0 \\ 1 & 2 & 0 & 1 \\ 1 & 1 & 1 & 1 \end{bmatrix} \quad (2.57) $$

우리는 다음과 같이 첨가 행렬을 쓰고

$$ \left[ \begin{array}{rrrr\vert rrrr} 1 & 0 & 2 & 0 & 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 & 0 & 1 & 0 & 0 \\ 1 & 2 & 0 & 1 & 0 & 0 & 1 & 0 \\ 1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \end{array} \right] $$

가우스 소거법을 사용하여 이를 기약 행사다리꼴(RREF)로 변환한다

$$ \left[ \begin{array}{rrrr\vert rrrr} 1 & 0 & 0 & 0 & -1 & 2 & -2 & 2 \\ 0 & 1 & 0 & 0 & 1 & -1 & 2 & -2 \\ 0 & 0 & 1 & 0 & 1 & -1 & 1 & -1 \\ 0 & 0 & 0 & 1 & -1 & 0 & -1 & 2 \end{array} \right], $$

그러면 우리가 원하는 역행렬은 우변에 주어진다:

$$ A^{-1} = \begin{bmatrix} -1 & 2 & -2 & 2 \\ 1 & -1 & 2 & -2 \\ 1 & -1 & 1 & -1 \\ -1 & 0 & -1 & 2 \end{bmatrix}. \quad (2.58) $$

우리는 곱셈 $AA^{-1}$ 를 수행하고 $I_4$ 가 복구되는 것을 관찰함으로써 (2.58)이 실제로 역행렬임을 검증할 수 있다.

$\to$ 07.A의 역행렬을 기본 행렬들의 곱으로 나타내기

$A$ 를 기약 행 사다리꼴로 변환하는 기본 행렬들의 곱을 $B$ 라 하자.

$$ B = E_6 E_5 E_4 E_3 E_2 E_1 $$

$A$ 의 크기와 대응되는 단위행렬을 $A$ 오른쪽에 둔 행렬을 기약 사다리꼴로 변환하기 위한 기본행렬은 $A$ 를 $I$ 로 바꾸기 위한 변환과 동일하다.

$$ B \times [ A \mid I ] = [ \mathbf{B}A \mid \mathbf{B}I ] = [I \vert B] $$

$BA=I$ 이므로 $B$ 는 $A^{-1}$ 이다. 따라서 위와 같이 첨가행렬을 만들고 기본 행 연산을 하는 것은 $A$ 를 $I$ 로 만들기 위해 필요한 기본 행렬들을 구하는 것과 같다.

2.3.4 선형 연립방정식 해결을 위한 알고리즘

다음에서, 우리는 $Ax = b$ 형태의 선형 연립방정식을 푸는 접근법들을 간략히 논의한다. 우리는 해가 존재한다고 가정한다. 만약 해가 없다면, 우리는 근사 해(approximate solutions)에 의존해야 하는데, 이는 이 챕터에서는 다루지 않는다. 근사 문제를 해결하는 한 가지 방법은 선형 회귀(linear regression)의 접근법을 사용하는 것이며, 이는 9장에서 자세히 다룬다.
$\quad$ 특수한 경우, 우리는 $Ax = b$ 의 해가 $x = A^{-1}b$ 로 주어지는 역행렬 $A^{-1}$ 를 결정할 수 있을지도 모른다. 하지만, 이는 오직 $A$ 가 정사각 행렬이고 가역적(invertible)일 때만 가능한데, 실제로는 그렇지 않은 경우가 많다. 그렇지 않은 경우, 약한 가정(즉, $A$ 가 선형 독립인 열들을 가져야 함) 하에서 우리는 다음과 같은 변형을 사용할 수 있다:

$$ Ax = b \iff A^\top Ax = A^\top b \iff x = (A^\top A)^{-1}A^\top b \quad (2.59) $$

그리고 무어-펜로즈 의사 역행렬(Moore-Penrose pseudo-inverse) $(A^\top A)^{-1}A^\top$ 를 사용하여 해 (2.59)를 결정할 수 있다. 이는 $Ax = b$ 를 푸는 최소 노름 최소 제곱 해(minimum norm least-squares solution)에 해당한다.
이 접근법의 단점은 행렬-행렬 곱( $A^\top A$ )과 $A^\top A$ 의 역행렬을 계산하는 데 많은 계산 비용이 든다는 것이다. 게다가, 수치적 정밀도(numerical precision)의 이유로 역행렬이나 의사 역행렬을 직접 계산하는 것은 일반적으로 권장되지 않는다. 따라서 다음 내용에서는 선형 연립방정식을 푸는 대안적인 접근법들을 간략히 논의한다.
$\to$ 현실 데이터 행렬은 대부분 정사각 행렬이 아니며, 정사각이라도 역행렬이 존재하지 않는 경우가 많다. 따라서 $A^T$ 를 양변에 곱해 의사 역행렬을 구하는 정규방정식을 사용한다. 이는 해가 없을 때, 에러를 최소화 하는 해를 찾아준다. 하지만 이는 연산량이 커질수록 컴퓨터의 부동소수점 오차도 커지기 때문에 수치적으로 불안정하다.
$\quad$ 가우스 소거법은 행렬식 계산(4.1절), 벡터 집합의 선형 독립성 확인(2.5절), 역행렬 계산(2.2.2절), 행렬의 랭크 계산(2.6.2절), 그리고 벡터 공간의 기저 결정(2.6.1절) 등을 수행할 때 중요한 역할을 한다. 가우스 소거법은 수천 개의 변수를 가진 선형 연립방정식을 푸는 직관적이고 건설적인(constructive) 방법이다. 하지만, 수백만 개의 변수를 가진 시스템의 경우, 필요한 산술 연산의 횟수가 연립방정식 개수의 세 제곱에 비례(scales cubically)하여 증가하므로 실용적이지 않다(impractical).
$\quad$ 실제로는, 많은 수의 선형 방정식을 포함하는 시스템은 간접적으로(indirectly) 풀리는데, 여기에는 Richardson 방법, Jacobi 방법, Gauß-Seidel 방법, 연속 과완화(successive over-relaxation) 방법과 같은 정상 반복법(stationary iterative methods)이나, 켤레 기울기(conjugate gradients), 일반화된 최소 잔여(generalized minimal residual), 이중 켤레 기울기(biconjugate gradients)와 같은 Krylov 부분공간 방법(Krylov subspace methods)이 사용된다. 더 자세한 내용은 Stoer and Burlirsch (2002), Strang (2003), Liesen and Mehrmann (2015)의 책들을 참고하기 바란다.
$\quad$ $x_*$ 를 $Ax = b$ 의 해라고 하자. 이러한 반복법들의 핵심 아이디어는 다음과 같은 형태의 반복(iteration)을 설정하는 것이다:

$$ x^{(k+1)} = Cx^{(k)} + d \quad (2.60) $$

여기서 적절한 행렬 $C$ 와 벡터 $d$ 를 선택하여, 매 반복마다 잔차 오차(residual error) $\vert \vert x^{(k+1)} - x_*\vert \vert$ 를 줄여나가며 $x_*$ 에 수렴하게 만든다. 우리는 3.1절에서 벡터 간의 유사도(similarities)를 계산할 수 있게 해주는 노름(norm, $\Vert \cdot \Vert$ )을 소개할 것이다.

$\to$ 이는 선형대수 문제를 점화식 문제로 바꾸는 것과 같다. $Ax=b$ 를 만족하는 $x$ 를 찾고싶은데 이를 변형해서 $x=Cx+d$ 형태로 만든다. 아무 숫자나 찍어서 초기값 $x^{(0)}$ 을 정한 다음 $x^{(1)} = C x^{(0)} + d$ 에 대입한다. 또 나온 값을 $x^{(2)} = C x^{(1)} + d$ 에 대입하며 이 과정을 계속하면, $x^{(k)}$ 가 진짜 정답 $x_*$ 로 수렴한다. 이때 수렴하기 위해 행렬 $C$ 가 $x$ 에 미치는 영향은 1보다 작아야 한다.